#include <iostream>
#include <math.h>

using namespace std;

/**
 * @fn 判定一个整数是否是素数
 * @brif 谭浩强《c程序设计》，谈到素数的判定算法：给定一个正整数n，用2到sqrt(n)之间的所有整数去除n，如果可以整除，则n不是素数，如果不可以整除，则n就是素数。这个算法的时间复杂度为O（sqrt（n））
 * @param num 需要判定的数字
 * @return 是素数返回true，否则返回false
 * */
bool is_prime1 (unsigned num)
{
	int square_root;
	square_root = sqrt(num);
	for (int i = 2; i <= square_root; i++)
	{
		if (num%i == 0)
		{
			return false;
		}
	}
	return true;
}

unsigned mersenne (int exp) 
{
	if (exp > 0 && exp < 32)
	{
		return (2 << (exp - 1) ) - 1;
	}
	return 0;
}

int main ()
{
	for (int i = 0; i < 32; i++)
	{
		//cout << "When i= " << i << ", mersenne number is: " << mersenne(i) << endl;
		if (is_prime1(mersenne(i)))
		{
			cout << "2exp" << i << " - 1 = " << mersenne(i) << endl;
		}
	}
	return 0;
}

